/****************************************
 * 循环双向链表
 * Created by zlj on 2024/6/25.
****************************************/

#ifndef DATA_STRUCTURE_DCLINKEDLIST_H
#define DATA_STRUCTURE_DCLINKEDLIST_H

#include "option_config.h"

/**
 * 初始化
 * @param list
 */
void InitDCLinkedList(DList *list);

/**
 * 尾插
 * @param list
 * @param x
 */
void DCLinkedList_push_back(DList *list, ElemType x);

/**
 * 头插
 * @param list
 * @param x
 */
void DCLinkedList_push_front(DList *list, ElemType x);

/**
 * 打印数据
 * @param list
 */
void DCLinkedList_show_list(DList *list);

/**
 * 尾删除
 * @param list
 */
void DCLinkedList_pop_back(DList *list);

/**
 * 头删除
 * @param list
 */
void DCLinkedList_pop_front(DList *list);

/**
 * 按值插入
 * @param list
 * @param x
 */
void DCLinkedList_insert_val(DList *list, ElemType x);

/**
 * 查找值所在位置
 * @param list
 * @param x
 * @return
 */
DNode *DCLinkedList_find(DList *list, ElemType x);

/**
 * 有效节点长度
 * @param list
 * @return
 */
int DCLinkedList_length(DList *list);

/**
 * 按值删除
 * @param list
 * @param x
 */
void DCLinkedList_delete_val(DList *list, ElemType x);

/**
 * 升序
 * @param list
 */
void DCLinkedList_sort(DList *list);

/**
 * 倒置
 * @param list
 */
void DCLinkedList_resver(DList *list);

/**
 * 清除
 * @param list
 */
void DCLinkedList_clear(DList *list);

/**
 * 销毁
 * @param list
 */
void DCLinkedList_destory(DList *list);


#endif //DATA_STRUCTURE_DCLINKEDLIST_H
